package org.edu.modules.stu.base.service;

import org.edu.common.base.BaseService;
import org.edu.common.base.BasePageDto;
import org.edu.common.dto.BaseCountDto;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.edu.modules.stu.base.dto.VeBaseStudentGraduationDto;
import org.edu.modules.stu.base.dto.VeStudentVo;
import org.edu.modules.stu.base.entity.VeBaseStudent;
import org.edu.modules.stu.base.dto.VeBaseStudentDto;
import org.edu.modules.stu.biye.dto.VeStuGraduationAuditInfoDto;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * service-学生信息表
 *
 * @author Erik Zhang
 * @version 1.0
 * @since 2021-04-08
 */
public interface VeBaseStudentService extends BaseService<VeBaseStudent> {

    List<BaseCountDto> countDto(@Param("dto") String year);

    IPage<VeBaseStudentDto> pageDto(BasePageDto page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

    IPage<VeStuGraduationAuditInfoDto> pageGraduationDto(BasePageDto page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

    IPage<VeBaseStudentDto> pageDtoByBanjinIds(BasePageDto page, @Param(Constants.WRAPPER) Wrapper queryWrapper, String[] ids);

    /**
     * 根据身份证批量查询
     */
    public Map<String, Integer> batchGetIdBySfzh(Set<String> allSfzh);

    /**
     * 根据学号批量查询
     */
    public Map<String, Integer> batchGetXhByNumbers(Set<String> allXh);

    /**
     * 查询实体类
     */
    VeBaseStudentDto findDtoById(String id);

    /**
     * 查询实体类
     */
    VeBaseStudentDto findDtoByXh(String xh);

    /**
     * 新增或者修改
     */
    void insertOrUpdate(VeStudentVo dto, Boolean isAdd);

    /**
     * 根据班级ids找学生
     */
    List<VeBaseStudent> listByBanjinIds(String[] ids);

    //查询在校生
    List<BaseCountDto> countStudentAtSchool(@Param("gradeId") String gradeId,
                                            @Param("falId") String falId,
                                            @Param("specId") String specId,
                                            @Param("bjId") String bjId);

    //历届毕业生统计
    List<BaseCountDto> graduateStatistics(@Param("falId") Integer falId, @Param("specId") Integer specId);
}
